home *** CD-ROM | disk | FTP | other *** search
/ Komputer for Alle 1999 #5 / 1999 CD 5 (black).iso / Delphi3 / install / data.z / DSGNWNDS.INT < prev    next >
Encoding:
Text File  |  1997-08-05  |  4.6 KB  |  182 lines

  1.  
  2. {*******************************************************}
  3. {                                                       }
  4. {       Delphi Visual Component Library                 }
  5. {                                                       }
  6. {       Copyright (c) 1995,97 Borland International     }
  7. {                                                       }
  8. {*******************************************************}
  9.  
  10. unit DsgnWnds;
  11.  
  12. interface
  13.  
  14. uses Messages, SysUtils, Classes, Controls, Forms, LibIntf, DsgnIntf;
  15.  
  16. type
  17.   TDesignWindow = class(TForm)
  18.   private
  19.     FSelection: TComponentList;
  20.     FOwner: TComponent;
  21.     FDesigner: TFormDesigner;
  22.     FActive: Boolean;
  23.     procedure ComponentRead(Component: TComponent);
  24.     procedure ReaderSetName(Reader: TReader; Component: TComponent;
  25.       var Name: string);
  26.     procedure WMActivate(var Msg: TWMActivate); message WM_ACTIVATE;
  27.   protected
  28.     procedure Activated; dynamic;
  29.     procedure ActivateInspector(Ch: Char);
  30.     function ClipboardComponents: Boolean;
  31.     procedure CopyComponents(Root: TComponent; Components: TComponentList);
  32.     procedure PasteComponents(AOwner, AParent: TComponent;
  33.       Components: TComponentList);
  34.     procedure SetSelection(Components: TComponentList);
  35.     function UniqueName(Component: TComponent): string; virtual; abstract;
  36.   public
  37.     constructor Create(AOwner: TComponent); override;
  38.     destructor Destroy; override;
  39.     procedure ComponentDeleted(Component: TComponent); virtual;
  40.     function GetEditState: TEditState; virtual;
  41.     procedure EditAction(Action: TEditAction); virtual;
  42.     procedure FormClosed(AForm: TCustomForm); virtual;
  43.     procedure FormModified; virtual;
  44.     procedure SelectionChanged(ASelection: TComponentList); virtual;
  45.     property Active: Boolean read FActive;
  46.     property Designer: TFormDesigner read FDesigner write FDesigner;
  47.   end;
  48.  
  49. implementation
  50.  
  51. uses Windows, Clipbrd;
  52.  
  53. constructor TDesignWindow.Create(AOwner: TComponent);
  54. begin
  55.   inherited Create(AOwner);
  56.   CompLib.RegisterDesignWindow(Self);
  57.   SetBounds(200, DelphiIDE.GetMainWindowSize.Bottom + 2, Width, Height);
  58. end;
  59.  
  60. destructor TDesignWindow.Destroy;
  61. begin
  62.   CompLib.UnregisterDesignWindow(Self);
  63.   inherited Destroy;
  64. end;
  65.  
  66. procedure TDesignWindow.Activated;
  67. begin
  68. end;
  69.  
  70. procedure TDesignWindow.WMActivate(var Msg: TWMActivate);
  71. begin
  72.   inherited;
  73.   FActive := Msg.Active <> 0;
  74.   if FActive then
  75.   begin
  76.     DelphiIDE.FormActivated;
  77.     Activated;
  78.   end;
  79. end;
  80.  
  81. procedure TDesignWindow.ActivateInspector(Ch: Char);
  82. begin
  83.   DelphiIDE.ModalEdit(Ch, Self);
  84. end;
  85.  
  86. function TDesignWindow.ClipboardComponents: Boolean;
  87. begin
  88.   Result := Clipboard.HasFormat(CF_COMPONENTS) or
  89.     (Clipboard.HasFormat(CF_TEXT) and PossibleStream(Clipboard.AsText));
  90. end;
  91.  
  92. procedure TDesignWindow.ComponentDeleted(Component: TComponent);
  93. begin
  94. end;
  95.  
  96. procedure TDesignWindow.CopyComponents(Root: TComponent; Components: TComponentList);
  97. var
  98.   S: TMemoryStream;
  99.   W: TWriter;
  100.   I: Integer;
  101. begin
  102.   S := TMemoryStream.Create;
  103.   try
  104.     W := TWriter.Create(S, 1024);
  105.     try
  106.       W.Root := Root;
  107.       for I := 0 to Components.Count - 1 do
  108.       begin
  109.         W.WriteSignature;
  110.         W.WriteComponent(TComponent(Components[I]));
  111.       end;
  112.       W.WriteListEnd;
  113.     finally
  114.       W.Free;
  115.     end;
  116.     CopyStreamToClipboard(S);
  117.   finally
  118.     S.Free;
  119.   end;
  120. end;
  121.  
  122. function TDesignWindow.GetEditState: TEditState;
  123. begin
  124.   Result := [];
  125. end;
  126.  
  127. procedure TDesignWindow.EditAction(Action: TEditAction);
  128. begin
  129. end;
  130.  
  131. procedure TDesignWindow.FormClosed(AForm: TCustomForm);
  132. begin
  133. end;
  134.  
  135. procedure TDesignWindow.FormModified;
  136. begin
  137. end;
  138.  
  139. procedure TDesignWindow.ComponentRead(Component: TComponent);
  140. begin
  141.   FSelection.Add(Component);
  142. end;
  143.  
  144. procedure TDesignWindow.ReaderSetName(Reader: TReader; Component: TComponent;
  145.   var Name: string);
  146. begin
  147.   if (Reader.Root = FOwner) and (FOwner.FindComponent(Name) <> nil) then
  148.     Name := UniqueName(Component);
  149. end;
  150.  
  151. procedure TDesignWindow.PasteComponents(AOwner, AParent: TComponent; Components: TComponentList);
  152. var
  153.   S: TStream;
  154.   R: TReader;
  155. begin
  156.   S := GetClipboardStream;
  157.   try
  158.     R := TReader.Create(S, 1024);
  159.     try
  160.       R.OnSetName := ReaderSetName;
  161.       FOwner := AOwner;
  162.       FSelection := Components;
  163.       R.ReadComponents(AOwner, AParent, ComponentRead);
  164.     finally
  165.       R.Free;
  166.     end;
  167.   finally
  168.     S.Free;
  169.   end;
  170. end;
  171.  
  172. procedure TDesignWindow.SelectionChanged(ASelection: TComponentList);
  173. begin
  174. end;
  175.  
  176. procedure TDesignWindow.SetSelection(Components: TComponentList);
  177. begin
  178.   CompLib.SetSelection(Designer, Self, Components);
  179. end;
  180.  
  181. end.
  182.